package com.partsoft.dits.exts;

import java.util.Map;
import java.util.Set;

import com.partsoft.dits.utils.ReturnExecutionCallback;

/**
 * 扩展执行器
 */
public interface ExtendsExecution {
	
	/**
	 * 在扩展中执行（run接口中执行的代码可以使用扩展库中的类）。
	 * @param run 执行器
	 */
	<T> T executeInExtends(ReturnExecutionCallback<T> callback);
	
	
	/**
	 * 获得别名的名字空间集合
	 * @return {@link Map}
	 */
	 Set<String> getExtendsAliasNamespaces();
	 
	 /**
	 * 获得已定义别名的类类型，调用的当前线程下文ClassLoader({@link Thread#getContextClassLoader()})必须等于{@link #getExtendsClassLoader()}否则抛错。
	  * @param namespace 别名名称
	  * @return 对象定义
	  */
	 <T> Map<String, T> getExtendsAliasObjects(String namespace);
	 
}
